package net.servir.capacidades.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.ParticipanteBusqueda;
import net.servir.capacidades.model.ServicioCivil;
import net.servir.capacidades.model.ServicioCivilBusqueda;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.CensoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Iterator;
import java.util.List;

@Controller
public class GestionCorreoController {

	@Autowired 
	private CapacidadesService capacidadesService;
	@Autowired 
	private CensoService censoService;
	@RequestMapping("/gestionCorreo.htm")
	public @ModelAttribute("servicioCivilBusqueda")
	ServicioCivilBusqueda participanteBusqueda(HttpServletRequest request) {
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniUsuario = null;
		if(session.getAttribute("dni") != null)			
			dniUsuario = session.getAttribute("dni").toString();
		
		//Obtenemos los datos del Usuario
	
		Usuario usuario = capacidadesService.GetUsuarioIdentificacion(dniUsuario);
		if (usuario == null)
			return null;
			
		//************************************************************

		ServicioCivilBusqueda obj = new ServicioCivilBusqueda();
		obj.setMensaje("");
		// Controles 
		String ubigeo = "";
		String accion = null;
		accion = request.getParameter("accion");
		
		String coddep = null;
		coddep = request.getParameter("coddep");
		obj.setDepartamentos(capacidadesService.ObtenerDepartamentos());
		if (coddep != null)
		{
			ubigeo = coddep;
			if (!coddep.equals("0"))
			{
				obj.setCoddep(coddep);
				obj.setProvincias(capacidadesService.ObtenerProvincias(coddep));
			}
		}
		
		String codpro = null;
		codpro = request.getParameter("codpro");
		
		if (accion != null && accion.equals("REFRESCARDEP"))
		{
			obj.setCodpro("0");
			codpro = null;
		}
		if (codpro != null )
		{	
			obj.setCodpro(codpro);
			ubigeo += codpro;
			if (!codpro.equals("") & !(codpro .equals("0")))
			{
				obj.setDistritos(capacidadesService.ObtenerDistritos(coddep, codpro));
			}
		}
			
		String coddis = null;
		coddis = request.getParameter("coddis");
		if (coddis != null)
		{
			obj.setCoddis(coddis);
			ubigeo += coddis;
		}
		
		Integer idSistema = null;
		obj.setSistemas(capacidadesService.ObtenerSistema());
		String conAmbito = "0";
		idSistema = 0;
		Integer idAmbito = null;
		if (request.getParameter("idSistema") != null)
		{
			idSistema = Integer.parseInt(request.getParameter("idSistema"));
			obj.setIdSistema(idSistema);
		}
		if (idSistema != 0)
		{
			Iterator itr = null;
			Sistema s = null;
			itr = obj.getSistemas().iterator();
			if (itr!= null)
			{
			Integer total_rows = obj.getSistemas().size();
			Integer row = 0; 
			while(itr.hasNext()){
				row += 1;
				s=(Sistema)itr.next();
				if (s.getId_sistema().intValue() == idSistema)
				{
					obj.setAmbitos(capacidadesService.ObtenerAmbito(idSistema));
					if (s.getCon_ambitos().equals("1"))
					{
						conAmbito = "1";
					}
					else
					{
						// TODO para el caso de varios ambitos cambiar por un select
						// por ahora esta un hide
						idAmbito = obj.getAmbitos().getFirst().getId_ambito().intValue();
						obj.setIdAmbito(idAmbito);
					}

				}
			}
			}
		}
		obj.setConAmbito(conAmbito);

		String codPerfil = null;
		codPerfil = request.getParameter("codPerfil");
		obj.setOptPerfiles(capacidadesService.ObtenerPerfiles());
		if (codPerfil != null && !codPerfil.equals(""))
			obj.setCodPerfil(codPerfil);
		
		
		Integer idNivelGobierno = 0;
		obj.setNivelGobiernos(capacidadesService.ObtenerNivelGobiernos());
		if (request.getParameter("idNivelGobierno") != null)
		{	
			idNivelGobierno = Integer.parseInt(request.getParameter("idNivelGobierno").toString());
			obj.setIdNivelGobierno(idNivelGobierno);
		}
		
		if (coddis != null)
			ubigeo += coddis;
		Integer idEjecutora = null;
		if (request.getParameter("idEjecutora") != null & idNivelGobierno != null ) //& idPliego != null
		{
			if (!(request.getParameter("idEjecutora").equals("")) ) // & idPliego != 0
			{	
				idEjecutora = Integer.parseInt(request.getParameter("idEjecutora").toString());
				obj.setIdEjecutora(idEjecutora);
				obj.setEjecutoras(capacidadesService.ObtenerEjecutorasNivelGobierno(idNivelGobierno,ubigeo,0));
			}
		}
		
		String dni = (String) request.getParameter("dni");
		if (dni!= null)
			obj.setDni(dni.trim());
		
		String codEstadosOperador = null;
		codEstadosOperador = request.getParameter("codEstadosOperador");
		obj.setOptEstadosOperadores(capacidadesService.ObtenerEstadosOperadores());
		
		Integer idServicioCivil = null;

		List  RptSeguimientoPrueba = null;
		if (accion != null)
		{
			if (accion.equals("BUSCAR"))
			{
				
			}
			
			if (accion.equals("CONFIRMAR"))
			{
				
			}
			
			if (accion.equals("ELIMINAR"))
			{
				if (request.getParameter("idServicioCivil") != null & !request.getParameter("idServicioCivil").equals(""))
					idServicioCivil = Integer.parseInt(request.getParameter("idServicioCivil").toString());

				
			}

		}
		
		List  RptServicioCivil = null;
		if (accion != null)
		{	
			if (accion.equals("BUSCAR"))
			{
				ServicioCivilBusqueda criterios = obj;
				String vSql = censoService.obtenerRptQueryServicioCivil(obj);
				// Borra todo lo no confirmado y cargar los datos de la busqueda a la tabla Detalle_Correo_Masivo
				// capacidadesService.CargarResultadosBusqueda(vSql, dniUsuario);
				RptServicioCivil = capacidadesService.ObtenerDestinatariosCorreo(dniUsuario);
				session.setAttribute("QUERY", capacidadesService.ObtenerQueryDestinatariosCorreo(dniUsuario));
			}
		}
		else
		{
			// ejecutar la ultima busqueda efectuada
			RptServicioCivil = capacidadesService.ObtenerDestinatariosCorreo(dniUsuario);	
		}
		
		if(obj.getMensaje().equals("")){
				if (RptServicioCivil == null)
					obj.setMensaje("Sin resultados para mostrar.");
				if (RptServicioCivil != null && RptServicioCivil.size() == 0)
					obj.setMensaje("Ninguna coincidencia para los filtros seleccionados.");
				if (RptServicioCivil != null && RptServicioCivil.size() > 0)
					obj.setMensaje("Total " + RptServicioCivil.size() + " coincidencia para los filtros seleccionados.");
		}
		request.setAttribute("DATALIST", RptServicioCivil);	
		obj.setAccion("BUSCAR");
		
		if (RptServicioCivil != null)
		{
			if (RptServicioCivil.size() > 0)
				obj.setConResultado("1");
			else
				obj.setConResultado("0");
		}
		else
		{
			obj.setConResultado("0");
		}
		
		if (codEstadosOperador != null)
			obj.setCodEstadosOperador(codEstadosOperador);
		else
			obj.setCodEstadosOperador("REGI");
		
		return obj;
	}
}
